import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * Content: IO流读写文件
 * --------------------------------------------------
 * 用 Java 的 IO 流进行读写文件操作: https://juejin.cn/post/7166085870720647198
 */

public class java_1600_io {

    private static final Scanner in = new Scanner(System.in);

    public static void main(String[] args) throws IOException {

        // IO流读写文件
        System.out.println("--------------------IO流读写文件--------------------");

//        File file = createFile();
        File file = new File("xqz.txt");

        writeToFile(file);

        System.out.println("程序执行结束");

    }

    private static void writeToFile(File file) throws IOException {
        // 使用 try-with-resource机制 自动回收打开的资源 - JDK1.7 之后的功能
        try (
                // 创建一个 outputstream 建立一个从程序到文件的 byte 数据传输流 (字节流)
                FileOutputStream fos = new FileOutputStream(file);

                // 创建一个可以使用 outputstream 的 Writer，并制定字符集，作用: 字节流 转 字符流
                OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);

                // 使用PrintWriter, 可以方便的写入一行字符
                PrintWriter printWriter = new PrintWriter(osw);
        ) {
            System.out.println("输入的内容会实时写入文件，如果输入空行则结束");
            while (true) {
                String lineToWrite = in.nextLine().trim();

                System.out.println("输入内容为：" + lineToWrite);
                if (lineToWrite.trim().equals("")) {
                    System.out.println("输入结束");
                    break;
                } else {
                    printWriter.println(lineToWrite);
                    // 真正用的时候不要写一行就flush() 这里只是演示
                    printWriter.flush();
                }
            }
            // 平时用的时候放在外面 flush
            // pw.flush();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private static File createFile() throws IOException {
        System.out.println("请输入文件名：");
        String fileName = in.nextLine().trim();
        File file = new File("." + File.separator + fileName +".txt");

        if (file.isFile()) {
            System.out.println("目标文件存在，删除：" + file.delete());
        }

        System.out.println(file.createNewFile());
        return file;
    }
}
